#include <REGX52.H>





sbit I2C_SCL=P2^1;// 位声明
sbit I2C_SDA=P2^0;// 位声明



void I2C_Start(void) //通讯开始
{
	I2C_SDA=1;//确保I2C为1，确保I2C为空闲状态
	I2C_SCL=1;//确保I2C为1，确保I2C为空闲状态
	
	I2C_SDA=0; //在SCL为高电平时，使得SDA产生高低电平的变化
	I2C_SCL=0;//确保I2C拼图拼接正确


}

void I2C_Stop(void) //通讯结束
{
	I2C_SDA=0; //确保SDA为低电平
	I2C_SCL=1;  //在SCL为高电平时，使得SDA产生高低电平的变化
	I2C_SDA=1; //在SCL为高电平时，使得SDA产生高低电平的变化

}

void I2C_SendByte(unsigned char Byte) //发送开始	
{	
	unsigned char I;

	for(I=0;I<8;I++)//循环 执行八次
	{
	I2C_SDA=Byte&(0X80>>I);//取出最高位 然后移位循环八次。将一个字节的数据都发给SDA
	I2C_SCL=1;
	I2C_SCL=0;
		
	}
}

unsigned char  I2CReceiveByte(void)//接收开始
{	
	unsigned char i,Byte=0X00;
	I2C_SDA=1;//释放总线
	
	for(i=0;i<8;i++)//循环八次
	{
	I2C_SCL=1;
	if(I2C_SDA){Byte|=(0X80>>i);}//如果I2C_SDA中有数据时 开始将最高位拿出来，否则不执行操作。
	I2C_SCL=0;
	}
	return Byte;
}

void I2C_SendAck(unsigned char AckBit) //发送应答位 0位应答，1为不应答
{
	I2C_SDA=AckBit;
	I2C_SCL=1;
	I2C_SCL=0;
}	

unsigned I2C_ReceiveAck(void)//接受应答位 0位应答，1为不应答
{
	unsigned char AckBit;
	I2C_SDA=1;
	I2C_SCL=1;
	AckBit=I2C_SDA;
	I2C_SCL=0;
	
	return AckBit; 
	
}


